﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CaiyinSoft.NetGather.Protocol
{
    /// <summary>
    /// 对HTML过滤，生成新的字符串
    /// </summary>
    public interface IHTMLFilter
    {

        IHTMLAnalyzer HTMLAnalyzer { get; set; }
        bool RunOnce { get; set; }
        bool Runabled { get; set; }
        int HTMLPosition { get; }
        string FilterCaption { get; }
        string ExpressionCaption { get; }
        string Description { get; }
        /// <summary>
        /// 上级解析器
        /// </summary>
        IHTMLFilter ParentFilter { get; set; }
        List<IHTMLFilter> ChildFilters { get; }
        /// <summary>
        /// 在转换器中转换次数
        /// </summary>
        //int FilterCount { get; set; }
        void SetInputHTML(string html);
        List<FilterResult> GetInputHTML(); // string GetInputHTML();
        /// <summary>
        /// 输出Key
        /// </summary>
        string OutputKey { get; set; }
        /// <summary>
        /// 输出类型
        /// 0 HTML字符串
        /// 1 HTML字符串集合
        /// 2 下载文件
        /// </summary>
        //int OutputType { get; set; }
        /// <summary>
        /// 字符的解析方式
        /// 0 XPath
        /// 1 Regex
        /// 2 字符处理接口
        /// 3 待定。。。
        /// </summary>
        //int ParseType { get; }
        /// <summary>
        /// 过滤的表达式
        /// 当ParseType=0时，即为XPath表达式
        /// 当ParseType=1时，即为正则表达式
        /// </summary>
        string FilterExpression { get; set; }

        /// <summary>
        /// 以指定方式解析HTML字符串，生成新字符串
        /// </summary>
        /// <returns></returns>
        List<FilterResult> FilterHTML();
        /// <summary>
        /// 增加子过滤器
        /// </summary>
        /// <param name="htmlAnalyze"></param>
        void AddChildFilter(IHTMLFilter htmlFilter);
        /// <summary>
        /// 解析HTML字符串时，附属执行的操作。
        /// </summary>
        /// <returns></returns>
        bool AssistExecute();

        IHTMLFilter Clone();

        InnerFormBase GetEditForm();
        InnerFormBase GetDomSourceForm(string testHTML);
        InnerFormBase GetFilterResultForm(string testHTML);
        InnerFormBase GetHTMLSourceForm(string testHTML);
        InnerFormBase GetRegexTestForm(string testHTML);
    }


}
